package com.shujia.day11;

public class Demo07ExceptionTxt {
    public static void main(String[] args) {
        /*
            异常操作的总结：
                1.对于可能会发生错误的代码处理方式
                    ① 使用 try catch 进行捕获异常 程序不会终止
                           如果有必须要执行的代码，可以放到 finally 代码块中
                    ② 使用 throws 对可能发生的异常进行抛出，交给调用方进行处理
                            如果调用方也不处理，那么遇到错误，程序会终止
                2.如果想定义错误
                    1.构建一个自定义异常类继承于 Exception 或者其子类
                    2. 通过 throw 方法触发 其异常类的对象

               finally的作用
                    用于释放资源，在IO流操作和数据库操作中会见到: 比如对Mysql连接进行关闭操作

               TODO throws和throw的区别：
                throws
                    用在方法声明后面，跟的是异常类名
                    可以跟多个异常类名，用逗号隔开
                    表示抛出异常，由该方法的调用者来处理
                    throws表示出现异常的一种可能性，并不一定会发生这些异常
                throw
                    用在方法体内，跟的是异常对象名
                    只能抛出一个异常对象名
                    表示抛出异常，由方法体内的语句处理
                    throw则是抛出了异常，执行throw则一定抛出了某种异常
               异常可以用埋雷 排雷的方式理解
         */

        /*
            如果catch里面有return语句，请问finally的代码还会执行吗?如果会，请问是在return前还是return后。
                finally代码是必须要执行的，是在return之前，函数执行完成之前执行
         */
        System.out.println(fun());
    }


    public static int fun(){
        try {
            System.out.println("return之前...");
            return 0;
//            System.out.println("return之后...");
        }catch (Exception exception){
            System.out.println("异常被捕获...");
        }finally {
            System.out.println("finally代码被执行...");
        }
        return 1;
    }
}
